查看原文
其他

去一个小广告

xiaofu 看雪学院 2019-05-25

0x1:

  

在Store里面找到一个看书的软件:



打开后发现右边一直有个广告。



找到对应的进程WWAHost.exe和其挂载的应用目录:



调试器挂上去调试了一下,发现它就是个嵌着网页的东西。于是就跑到这个应用的目录下面:



果然发现了一些HTML的文件,里面还有醒目的广告层,意思是让我赶快去掉。


Program Files\WindowsApps是你装的UWP应用。既然找到了要修改的文件,那改完就完事了,删掉ad-viewer的div,保存后提示:




0x2:

  

一开始我以为只是简单的文件夹权限问题,于是把文件夹的所有者改为了我的当前用户,再把当前用户的权限设为完全控制,不过仍然是失败的。



那么问题出在哪里呢,简单测试一下,看看是什么情况,用PsExec拉起system权限的cmd:




报错:



为什么系统正常的进程可以打开,而我们的进程不能打开呢。


于是我怀疑系统在minifilter上做了过滤,先随便找一个Create pre的回调:



看下其调用栈:



我们就知道了minifilter的irp_mj_create prefunc是由:

FLTMGR!FltpPerformPreCallbacks


负责调用的,看一下它对应的代码:



在这里做一个HOOK,调用回调后检测它设否设置了STATUS_ACCESS_DENIED。


mov     rax, qword ptr [rdi+18h]  我们在这里做一个HOOK:



在执行每个回调后,我们输出一下回调设置的状态值,然而可以看到,每个回调都设置的是STATUS_SUCCESS:



可是cmd仍然返回拒绝访问。并不是minifilter中所过滤的。那会不会是我们的打开方式不对呢。


先看下在安装软件的时候,是谁写入的文件:



AppXSvc是一个服务,我们可以手动运行命令来控制。

  • net start AppXSvc

  • net stop AppXSvc


那么,我们看一下它在CreateFile的时候,传入的是什么参数。于是我们需要HOOK NtCreateFile:




过滤一下路径和进程,就可以来看下输出的日志了:



这里可以看到是成功的。那么我们写一个程序按这个参数来填。



可惜还是报错。



0x3:

  

那会是什么原因呢,svchost拉起的AppXDeploymentServer.dll,,如果我直接注入到appxsvc服务里面然后写文件会什么情况呢。

  

在win10上面,一些系统进程变成了保护进程,这些保护进程普通进程是无法操作的,所以我们要先把appxsvc的保护标志去掉。



这个时候,我们就可以打开svchost的进程句柄了,但是当注入远线程调用LdrLoadDll的时候,竟然返回了STATUS_INVALID_IMAGE_HASH错误。


用调试器定位到关键的地方:



把MiValidateSectionSigningPolicy直接返回:




我们的DLL就可以顺利加载了。我们注入到svchost中创建一个新的文件是成功的,不仅如此,注入到它的父进程services.exe也是可以成功。莫非还是TOKEN的问题?


找到appxsvc的eprocess中的token:



发现有个比较敏感的字段被赋值了,当把这个字段的值清空的时候,发现svchosts也出现了STATUS_ACCESS_DENIED。网上搜下资料:



看来是由services继承的。不管这么多了,毕竟我只想去个广告。直接把services的token给explorer用吧。




也可以只拷贝这些字段到explorer中:



换掉之后,explorer就有权限修改WindowsApps了。把view目录下的所有html中的广告层都移除。



世界就清净了。


ps:浏览器中途崩溃了,再打开竟然可以恢复没保存的内容,点赞~




- End -


看雪ID:xiaofu             

https://bbs.pediy.com/user-99882.htm




本文由看雪论坛 xiaofu 原创

转载请注明来自看雪社区






热门技术文章推荐:






戳原文,看看大家都是怎么说的?

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存